# 03장 쿠버네티스 컨테이너 실행하기

Assembled by GimunLee


# kubectl

  • 쿠버네티스 클러스터를 관리하는 동작 대부분은 kubectl이라는 커맨드 인터페이스로(Command Line interface, CLI)로 실행 가능
  • 쿠버네티스 자원들의 생성, 업데이트, 삭제(create, update, delete)
  • 디버그, 모니터링, 트러블 슈팅(log, exec, cp, top, attach)
  • 클러스터 관리(cordon, top, drain, taint)

# 기본 사용법

$ kubectl [command] [TYPE] [NAME] [flags]
  • command: 자원에 실행하려는 동작 (create, get, delete)
  • TYPE: 자원 타입 (pod, service, ingress)
  • NAME: 자원 이름
  • FLAG: 부가적으로 설정할 옵션

# kubectl get

  • 쿠버네티스 자원 상태 확인하는 명령어

# kubctl get pods

$ kubectl get pods
  • NAME: 파드 이름 표시

  • READY: 파드의 준비 상태 표시

    • 0/1: 파드가 생성되었으나 사용할 준비가 되지 않음
    • 1/1: 파드가 생성되었고 사용할 준비가 되었음
  • STATUS: 파드의 현재 상태 표시

    • Running: 파드가 실행됨

    • Terminating: 컨테이너 접속 중

    • ContainerCreating: 컨테이너 생성 중

  • RESTARTS: 해당 파드가 몇 번 재시작했는지를 표시

  • AGE: 파드를 생성한 후 얼마나 시간이 지났는지 표시

# Kubectl get services

$ kubectl get services
  • NAME: 서비스의 이름 표시

  • TYPE: 서비스 타입 표시

  • CLUSTER-IP: 현재 클러스터 안에서 사용되는 IP

  • EXTERNAL-IP: 클러스터 외부에서 접속할 때 사용하는 IP

  • PORT(S): 해당 서비스에 접속하는 포트 표시

  • AGE: 자원을 생성한 후 얼마나 시간이 지났는지 표시

  • 추가로, kubernets라는 이름의 서비스는 kube-apiserver 관련 파드들을 가르킴


# POSIX/GNU 스타일의 명령 작성 규칙

  • kubectl은 기본적으로 POSIX/GNU 스타일의 명령 작성 규칙을 따름

# 주요 규칙

  • -과 함께 사용하는 옵션은 단일 알파벳/숫자 문자 인자와 같은 짧은 옵션(short option)
  • 일부 옵션은 인자를 필요로 함
  • --과 함께 사용하는 옵션은 알파벳 두 글자 이상으로 구성한 긴 옵션(long options)
  • -- 이후에 작성하는 인자가 있다면 쿠버네티스 관련 옵션들을 종료

# Kubeconfig 환경 변수

  • kubectl은 기본적으로 $HOME/.kube/config 파일에서 클러스터, 인증, 컨텍스트 정보를 읽어들이는데, 이러한 클러스터 구성 정보를 kubeconfig라고 칭함
  • 클러스터에서 사용할 수 있는 자원들은 $ kubectl api-resources 명령으로 확인 가능한데, 자원을 사용하기 전 반드시 확인하는 것이 좋음

# 디플로이먼트를 이용해 컨테이너 실행하기

  • 쿠버네티스를 이용해서 컨테이너를 실행하는 방법에는 크게 두 가지가 존재
    1. $ kubectl run 명령으로 직접 컨테이너를 실행
    2. 컨테이너를 어떻게 실행할지 세부 내용을 담은 YAML 형식의 템플릿으로 컨테이너 실행
  • 템플릿으로 컨테이너를 관리하면 버전 관리 시스템과 연동해서 자원 정의 변동 사항을 추적하기 쉽다는 장점이 있음

# kubectl run으로 컨테이너 실행하기

$ kubectl run 디플로이먼트이름 --image 컨테이너이미지이름 --port=포트번호
  • 쿠버네티스는 파드를 실행하는 여러 가지 컨트롤러를 제공하는데, $ kubectl run으로 파드를 실행시킬때 기본 컨트롤러는 디플로이먼트(deployment)
  • 사용자가 쿠버네티스 클러스터에 컨테이너를 실행하라고 명령하면 지정된 컨테이너 이미지를 가져와 쿠버네티스 클러스터 안에서 실행
$ kubectl get deployments
  • NAME: 클러스터에 배포한 디플로이먼트 이름
  • READY: 사용자가 최종 배포한 파드 개수와 디플로이먼트를 이용해 현재 클러스터에 실제로 동작시킨 파드 개수를 X/X 형태로 표시
  • UP-TO-DATE: 디플로이먼트 설정에 정의한 대로 동작중인 신규 파드 개수
  • AVAILABLE: 서비스 가능한 파드 개수로 헬스 체크로 서비스 가능한 상태라고 판단하면, AVAILABLE 항목의 파드 개수에 포함
  • AGE: 디플로이먼트를 생성한 후 얼마나 지났는지 시간을 표시

# 템플릿으로 컨테이너 실행하기

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
  labels:
    app: nginx-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-app
  template:
    metadata:
      labels:
        app: nginx-app
    spec:
      containers:
      - name: nginx-app
        image: nginx
        ports:
        - containerPort: 8080
$ kubectl apply -f nginx-app.yaml
  • 쿠버네티스의 자원들은 관련 설정을 정의한 템플릿과 $ kubectl apply 명령을 이용해 선억적 형태로 관리할 것을 권장

# Referenses

  • 쿠버네티스 입문 - 90가지 예제로 배우는 컨테이너 관리 자동화 표준 / 동양북스
Last Updated: 8/12/2020, 1:33:42 PM